; SISTEMA CONTROLADOR DE UNA CORREO INTELIGENTE

(defrule ResponderCorreo
	(and
		(busqueda_asun hecha)
		(busqueda_cont hecha)
	)
	=>
	(printout t "La busqueda esta hecha, las palabras claves no estan en el DS, y no tiene spam." crlf)
	(printout t "Respondiendo Correo..." crlf)
	(retract-string "(busqueda_asun hecha)")
	(retract-string "(busqueda_cont hecha)")
	(assert (correo por_responder))
	
)

(defrule HacerBusquedaCont
	(and
		(p_claves_cont existentes_dt)
		(busqueda_asun hecha)
	)
	=>
	(printout t "Las Palabras Clave del Contenido estan en el Diccionario de Telefonia." crlf)
	(printout t "Haciendo Busqueda con respecto al contenido..." crlf)
	(retract-string "(contenido por_leer)")
	(retract-string "(p_claves_cont existentes_dt)")
	(assert (busqueda_cont por_hacer))	
	;TODO: En controlador: (retract-string "(busqueda_cont por_hacer)")
	;TODO: En controlador: (assert (busqueda_cont hecha))
)

(defrule Spam
	(or
		(p_claves_asun existentes_ds)
		(p_claves_cont existentes_ds)
		(remitente spam)
	)
	=>
	(printout t "Verificando si el correo es Spam..." crlf)
	(printout t "El Correo es SPAM!!! No se respondera este Email." crlf)
	(assert (spam existente))
)


(defrule P_claves_Seleccionar_Extraer_Asun
	(and
		(asunto por_leer)
		(virus inexistente)
	)
	=>
	(retract-string "(asunto por_leer)")
	(printout t "Asunto por Leer." crlf)
	(printout t "Extrayendo todas las palabras del asunto." crlf)
	(printout t "Seleccionando palabras clave del asunto." crlf)
	
	(assert (p_claves_asun por_seleccionar))
	
	
	(assert (p_claves_asun por_extraer))

	
	
	;TODO: En controlador:	
	;						(assert (busqueda_asun hecha))
	;						(assert (p_claves_cont por_seleccionar))
	;									;TODO: En controlador: (assert (busqueda_cont hecha))
	;									;TODO: En controlador: (retract-string "(p_claves_cont por_seleccionar)").
	;	Aparte:
	;		(retract-string "(p_claves_cont por_extraer)")
)	

;(defrule P_claves_Asun_Verificar_DSyDT
;		(p_claves_asun por_seleccionar)
;	=>
;	(printout t "Palabras clave del asunto por extraer." crlf)
;	(printout t "Seleccionando palabras clave del asunto con respecto a DS." crlf)
;	(printout t "Seleccionando palabras clave del asunto con respecto a DT." crlf)
;	(retract-string "(p_claves_asun por_extraer)")
;	(assert (p_claves_asun por_verificar_ds))
;	(assert (p_claves_asun por_verificar_dt))
;)

;TODO: Quitar regla despues que este hecho en java:
(defrule ExistenciaVirus      
		(virus por_verificar)
	=>
	(printout t "Existencia de Virus Verificada." crlf)
	(retract-string "(virus por_verificar)")
	(assert (virus inexistente))
)

(defrule IniciarEstudio
		(correo no_leido)
	=>
	(printout t "No se ha hecho el preanalisis y analisis." crlf)
	(retract-string "(correo no_leido)")
	(assert (asunto por_leer))
	(assert (virus por_verificar))
	(assert (remitente por_leer))

	
)



; Variable global que muestra la tiempo actual dentro de la vivienda
(defglobal ?*tiempo* = 0)


; Funci�n que se aplica cuando est� bajando la tiempo.
; Comprueba si hay menos de 20 segundos para que el calefactor suba a 1 grado m�s
; la tiempo.
(deffunction bajando () 
	(if (> ?*tiempo* 0) 
	then (++ ?*tiempo*)
	      (printout t "Bajando tiempo." crlf)
	     (printout t "tiempo actual: "?*tiempo* " segundos" crlf)
	)
)


; Funci�n que se aplica cuando est� subiendo la tiempo.
; Comprueba si hay m�s de 20 segundos para que el calefactor baje a 1 grado m�s
; la tiempo.
(deffunction subiendo () 
	(if (> ?*tiempo* 20) 
	then (-- ?*tiempo*)
	      (printout t "Probando." crlf)
		(printout t "tiempo actual: "?*tiempo* " segundos" crlf)
	)
)